// 导入 fs 模块
let fs = require('fs')


function listall(filepath) {
   let arr = []
   /*
        1.判断是否为文件夹，如果不是，则直接返回文件名称
        2.如果是文件夹，则列出其下所有的内容（文件、文件夹）
        3.如果列出的内容中某个项目是文件夹，则继续深入列出其下所有的内容
    */
   // 使用同步方法，获得指定路径的状态，判断是文件夹还是文件
   let filestat = fs.statSync(filepath).isFile()
   // 如果是文件，直接推送到数组中
   if (filestat) {
      //调用数组的push方法，将一个对象插入到数组的尾部
      arr.push(filepath)
   }
   // 如果是文件夹
   else {
      // 如果是文件夹，则利用readdirSync方法，读取目录中的所有的内容（包含文件和文件夹）
      // readFileSync: 读取文件中的内容
      // readdirSync: 读取文件名
      let patharr = fs.readdirSync(filepath)
      // 如果是空文件夹，直接推送到数组中
      if(patharr.length === 0){
         arr.push(filepath)
      }
      // 遍历非空目录下的所有内容项目，再利用当前方法listAllFile来处理对应路径的信息（重点理解）
      patharr.forEach((item) => {
         // 判断filePath最后一个字符是否为/
         let lastfindsign = filepath.lastIndexOf('/') === filepath.length - 1
         // filePath如果最后一个是/，那么就和item直接拼接就可以，否则需要再加一个/
         let lastsym = lastfindsign ? filepath + item : `${filepath}/${item}`
         // 拿到处理好的路径以后，直接调用listall函数继续处理,拿到的结果lastsym和原结果newarr合并，
         // 再重新赋值给原结果resArr
         let newarr = listall(lastsym)
         arr = arr.concat(newarr)
      });
   }
   // 返回最后结果
   return arr
}
console.log(listall('./'));
